Skip to content

feat(orchestrator): rewrite main.go to use pipeline.Construct - #440

Merged
JamyDev merged 4 commits into
mainfrom
jamy/orchestrator-rewrite
Jul 30, 2026
Merged

feat(orchestrator): rewrite main.go to use pipeline.Construct#440
JamyDev merged 4 commits into
mainfrom
jamy/orchestrator-rewrite

Conversation

@JamyDev

@JamyDev JamyDev commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Replace ~500 lines of manual wiring with a single pipeline.Construct call. The orchestrator's run() now:

  1. Builds per-queue profiles (Profile/Profiles in profiles.go)
  2. Populates orchestrator.Deps with profile-derived Factory adapters
  3. Calls pipeline.Construct(deps, orchestrator.Stages, ...) to get a single lifecycle.Component
  4. Drives Start/Stop on that component

Removed:

  • newTopicRegistry (topology now declared in orchestrator.Stages)
  • queueExtensions/queueRegistry (replaced by Profile/Profiles)
  • Three *Factory adapter structs (replaced by func-type adapters)
  • registerPrimaryControllers (stages declare their own New funcs)
  • registerDLQControllers (stages declare their own DLQ funcs)

The host retains: infrastructure bootstrap, per-queue profile construction, change provider wiring, gRPC server lifecycle, and signal handling — all host-specific concerns per the RFC.

Test Plan

Boot service with main.go and test against simulator

Issue

https://linear.app/uber/issue/CODEM-209/example-figure-out-a-better-structure-for-wiring-up

Stack

@JamyDev
JamyDev force-pushed the jamy/orchestrator-rewrite branch from 9a5c1f6 to e2a3dbc Compare July 29, 2026 17:48
@JamyDev
JamyDev force-pushed the jamy/orchestrator-rewrite branch from e2a3dbc to cc413f8 Compare July 30, 2026 05:44
@JamyDev
JamyDev added this pull request to the merge queue Jul 30, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue because the pull requests in the stack were not ordered correctly in the queue Jul 30, 2026
@JamyDev
JamyDev force-pushed the jamy/orchestrator-rewrite branch from cc413f8 to f4d66b3 Compare July 30, 2026 06:06
@JamyDev
JamyDev force-pushed the jamy/orchestrator-rewrite branch from f4d66b3 to 1a3e5d8 Compare July 30, 2026 17:31
JamyDev and others added 4 commits July 30, 2026 17:52
Introduce `submitqueue/orchestrator/pipeline.go` with three exports:

- `Deps` struct: the full set of dependencies (logger, scope, storage,
  counter, and four extension factories) the orchestrator pipeline
  needs. This struct IS the service's public API toward deployers.

- `Stages` slice: the complete 12-stage pipeline topology as a typed
  table of `pipeline.Stage[Deps]`. Each row declares a primary
  controller constructor and its DLQ reconciler. Adding a stage =
  adding one row.

- `PublishOnlyTopics`: topics the orchestrator publishes to but does
  not consume (log, merge-conflict-check, runway-merge).

- `Controllers` struct + `NewControllers`: RPC-facing controllers
  (currently Ping), NOT bound to any wire contract.

Pure addition alongside the existing main.go wiring — no behavioral
changes.

Ref: doc/rfc/submitqueue/modular-queue-wiring.md (Step 3)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The score controller package does not exist — scoring was folded into
the speculator. Remove the score stage from Stages, the Scorer field
from Deps, and the controller/score import. Update the pipeline
diagram comment accordingly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
One consumer group ("orchestrator") for all topics in the service,
matching the convention that per-stage groups are unnecessary unless
instances are split by stage.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace ~500 lines of manual wiring with a single pipeline.Construct
call. The orchestrator's run() now:

1. Builds per-queue profiles (Profile/Profiles in profiles.go)
2. Populates orchestrator.Deps with profile-derived Factory adapters
3. Calls pipeline.Construct(deps, orchestrator.Stages, ...) to get a
   single lifecycle.Component
4. Drives Start/Stop on that component

Removed:
- newTopicRegistry (topology now declared in orchestrator.Stages)
- queueExtensions/queueRegistry (replaced by Profile/Profiles)
- Three *Factory adapter structs (replaced by func-type adapters)
- registerPrimaryControllers (stages declare their own New funcs)
- registerDLQControllers (stages declare their own DLQ funcs)

The host retains: infrastructure bootstrap, per-queue profile
construction, change provider wiring, gRPC server lifecycle, and
signal handling — all host-specific concerns per the RFC.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@JamyDev
JamyDev force-pushed the jamy/orchestrator-rewrite branch from 1a3e5d8 to 48f1e7a Compare July 30, 2026 18:01
Base automatically changed from jamy/orchestrator-pipeline to main July 30, 2026 18:11
@JamyDev
JamyDev added this pull request to the merge queue Jul 30, 2026
Merged via the queue into main with commit efccfa3 Jul 30, 2026
15 checks passed
@JamyDev
JamyDev deleted the jamy/orchestrator-rewrite branch July 30, 2026 18:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants